package com.qf.ps;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

public class PSConsumerMain1 {
    public static void main(String[] args) throws IOException, TimeoutException {
        //①创建一个连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置rabbitmq所在机器ip
        factory.setHost("localhost");
        //设置rabbitmq所在机器的程序端口号
        factory.setPort(5672);
        //设置用户名
        factory.setUsername("guest");
        //设置密码
        factory.setPassword("guest");
        //设置虚拟主机
        factory.setVirtualHost("cdm1");

        //② 利用连接工厂创建连接对象
        Connection conn = factory.newConnection();
        //③ 基于connection获取对应的channel通道对象
        Channel channel = conn.createChannel();

        //④ 消费队列中的消息
        /*
            p1: 消费的队列名字
            p2：是否自动确认
            p3：回调。可以在这里面处理消费的逻辑
         */
        channel.basicConsume("topicQue1", true, new DefaultConsumer(channel){
            /*
                String consumerTag: 消费者的标识，对于一个消费者而言是固定不变
                Envelope envelope:端点对象，可以通过这个对象获取生产者的标识、交换机和路由键等等信息
                AMQP.BasicProperties properties: 消息的基本设置，比如消息超时时间、消息标识号、是否持久化
                byte[] body: 消息内容
             */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("消费消息：" + new String(body, StandardCharsets.UTF_8));
            }
        });

        //⑤ 释放资源 -- 消费者不停止
    }
}
